package top.jacktgq.collection.list

/**
 @Author CandyWall
 @Date 2021/4/27--16:55
 @Description groovy中的映射
 */
// java中定义一个map
// def map = new HashMap()
// groovy中定义一个map
def colors = [
    red: '#ff0000',
    green: '#00ff00',
    blue: '#0000ff'
]
// 获取map中的元素的值
println colors.get('green')
println colors.getAt('green')
println colors['green']
println colors.green

// 添加元素
colors.put('orange', '#FF9900')
println colors
colors.lightblue = '#CCFFFF'
println colors
colors.complex = ['aaa': '#FFCCCC', 'bbb': '#FF6666']
println colors
// 获取map的类型不能直接使用.class，因为map的.key的方式用于根据key获取value
// 因此获取map的类型，需要调用getClass()方法
println colors.class
println colors.getClass()

println "Map操作详解========================="
def students = [
        1: [stu_no: '0001', name: '空条承太郎', score: 100, sex: '男'],
        2: [stu_no: '0002', name: '花京院典明', score: 100, sex: '男'],
        3: [stu_no: '0003', name: '乔瑟夫乔斯达', score: 90, sex: '男'],
        4: [stu_no: '0004', name: '阿布德尔', score: 60, sex: '男'],
        5: [stu_no: '0005', name: '波鲁那雷夫', score: 55, sex: '男'],
        6: [stu_no: '0006', name: '伊奇', score: 0, sex: '狗'],
        7: [stu_no: '0007', name: '空条徐伦', score: 85, sex: '女']
]

// map的遍历操作
// 直接遍历
students.each {
    student -> println "${student.key}：${student.value}"
}

students.each {
    key, value -> println "${key}：${value}"
}

// 带索引遍历
students.eachWithIndex { student, index -> println "${index}---------${student.key}：${student.value}"
}

students.eachWithIndex{ key, value, index -> println "${index}---------${key}：${value}"}

// 查找第一个成绩大于等于60分的学生信息
println students.find {
    student -> student.value.score >= 60
}
// 查找所有成绩大于等于60分的学生信息
println students.findAll {
    student -> student.value.score >= 60
}

// 统计男生中的及格人数
println students.count {
    student -> student.value.score >= 60 && student.value.sex == '男'
}

// 输出所有及格学生的姓名
println students.findAll {
    student -> student.value.score >= 60
}.collect {
    return it.value.name
}

// 根据成绩是否及格进行分组
println students.groupBy {
    student -> return student.value.score >= 60 ? "及格": "不及格"
}

students = [
        1: [stu_no: '0001', name: '空条承太郎', score: 100, sex: '男'],
        2: [stu_no: '0002', name: '花京院典明', score: 100, sex: '男'],
        3: [stu_no: '0003', name: '乔瑟夫乔斯达', score: 90, sex: '男'],
        4: [stu_no: '0004', name: '阿布德尔', score: 60, sex: '男'],
        5: [stu_no: '0005', name: '波鲁那雷夫', score: 55, sex: '男'],
        6: [stu_no: '0006', name: '伊奇', score: 0, sex: '狗'],
        7: [stu_no: '0007', name: '空条徐伦', score: 85, sex: '女']
]
// 排序
// map排序之后返回一个新的排好序的map，而不会对原map进行修改
// List排序是对原list进行排序
println students.sort {
    stu1, stu2 -> stu1.value.score - stu2.value.score
}